package lock;


import java.lang.reflect.Field;


/**
 * CAS(比较与交换)无锁算法
 * <p>
 * V(内存值)   A（旧的预期值）   B（改变值）
 * 如果
 * V == A 则 V = B
 * 否则
 * 报错或者抛出异常
 *
 * @author Caleb
 * @date 2021/3/22 9:55
 * @description
 */
public class CASTest {

//    private static Unsafe unsafe = null;
//    private static long valueOffset = 0;
//
//
//    static {
//        try {
//            Class<Unsafe> unsafeClass = Unsafe.class;
//            Field theUnsafe = unsafeClass.getDeclaredField("theUnsafe");
//            theUnsafe.setAccessible(true);
//            unsafe = (Unsafe) theUnsafe.get(null);
//            valueOffset = unsafe.objectFieldOffset(CASTest.class.getDeclaredField("value"));
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
    private volatile int value = 0;
//
//    public final int incrementAndGet() {
//        return unsafe.getAndAddInt(this,valueOffset,1);
//    }
//
//    public final int get() {
//        return unsafe.getInt(this,valueOffset);
//    }
//
//    public void lock(){
//        for( ; ; ){
//            if(unsafe.compareAndSwapInt(this,valueOffset,0,1)){
//                return;
//            }else{
//                Thread.yield();
//            }
//        }
//    }

    public void unlock(){
        value = 0;
    }

}
